package com.itbaizhan.service;

import com.itbaizhan.dao.StudentDao;
import org.springframework.context.annotation.*;

import java.sql.Connection;
import java.sql.DriverManager;

@Configuration
@ComponentScan("com.itbaizhan")
@PropertySource("classpath:db.properties")
@Import(JdbcConfig.class)
/*多个配置类*/
//@Import({JdbcConfig.class, StudentDao.class})
public class SpringConfig {
    /*第三方类*/

   /* @Bean(name="connection")
    public Connection getConnection(){
        try{
            Class.forName("com.mysql.jdbc.Driver");
            return DriverManager.getConnection("jdbc:mysql:///student","root","hua8503176");
        }catch (Exception e){
            return null;
        }
    }*/
    /*有参数的第三方类
    * spring会根据参数类型从容器中查找可用对象*/
   /* @Bean(name="connection")
    public Connection getConnection(StudentService studentService){
        System.out.println(studentService);
        try{
            Class.forName("com.mysql.jdbc.Driver");
            return DriverManager.getConnection("jdbc:mysql:///student","root","hua8503176");
        }catch (Exception e){
            return null;
        }
    }*/
}
/*使用配置类，不用bean.xml配置文件，使用纯注解实现IOC。*/
/*在真实开发中，我们一般还是会保留xml配置文件，很多情况下使用配置文件更加方便。*/
/*纯注解实现IOC需要一个Java类代替xml文件。这个Java类上方需要添加@Configuration，
表示该类是一个配置类，作用是代替配置文件。
@Configuration
public class SpringConfig {
}
注解实现IOC_@ComponentScan              scan:扫描; 浏览; 审视; 细看; 察看; 端详
作用：指定spring在初始化容器时扫描的包。

位置：配置类上方

@Configuration
@ComponentScan("com.itbaizhan")
public class SpringConfig {
}*/
/*@PropertiesSource("classpath:properties的配置文件")
* 作用：代替配置文件中的<context:property-placeholder>扫描配置文件

位置：配置类上方

注意：配置文件位置前要加关键字classpath*/

/*@Bean
* 作用：将方法的返回值对象放入Spring容器中。如果想将第三方类的对象放入容器，可以使用@Bean

位置：配置类的方法上方。

属性：name：给bean对象设置id

注意：@Bean修饰的方法如果有参数，spring会根据参数类型从容器中查找可用对象。

举例：如果想将jdbc连接对象放入Spring容器，我们无法修改Connection源码添加@Component，
* 此时就需要使用将@Bean该对象放入Spring容器*/

/*@Import
* 作用：如果配置过多，会有多个配置类，该注解可以为主配置类导入其他配置类
位置：主配置类上方*/